# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Four-Leaf Bank GUI                                                        #
#                                                               ## ##       #
# Geschreven voor de Four-Leaf Bank                               #         #
#                                                               ## ##       #
# Door Dennis Bogers                                                        #
#                                                                           #
# Dit is het userprogramma maar dan met een grafische interface             #
#                                                                           #
#                                                                           #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

# Import libs
import sys
import bank
import hashlib
import gtk
import pygtk
pygtk.require( "2.0" )

# Window-klasse, deze klasse heeft alle benodigde functies
class Window:

    # Als window gesloten word 
    def on_loginwindow_destroy(self, widget, data=None):
        gtk.main_quit()

    def on_mainwindow_destroy(self, widget, data=None):
        gtk.main_quit()
    
    # Als er op de loginbutton geklikt word
    def on_loginbutton_clicked(self, loginbutton, data=None):

        # Update hash en log in, stel dan de GUI in.
        userpass = hashlib.sha1()
        userpass.update(self.password.get_text() + self.nummerid.get_text())

        self.vid = self.nummerid.get_text()
        self.vnaam = self.naam.get_text()

        check = fl.login(self.nummerid.get_text(), self.naam.get_text(), userpass.hexdigest())
        if check == True:
            self.statuslabel.set_label("Status: Login Succes!")
            self.loginwindow.hide()
            self.mainwindow.show()
            self.hilabel.set_label("Welkom, " + self.naam.get_text())
            self.saldo.set_text(str(fl.checksaldo(self.nummerid.get_text())))
     
            self.txtbuffer.set_text(fl.readuserlog(self.vid))
            self.logbox.set_buffer(self.txtbuffer)   

        else:
             self.statuslabel.set_label("Status: De gegevens kloppen niet. Probeer het nogmaals!")

    # Als er op de close button geklikt word
    def on_closebutton_clicked(self, closebutton, data=None):
        gtk.main_quit()

    # Als er op de refresh button geklikt word
    def on_refreshbutton_clicked(self, refreshbutton, data=None):
        self.txtbuffer.set_text(fl.readuserlog(self.vid))
        self.logbox.set_buffer(self.txtbuffer)   

    def on_overmaakbutton_clicked(self, overmaakbutton, data=None):
        self.mainwindow.hide()
        self.adjustment.set_upper(fl.checksaldo(self.vid))
        self.dialog1.run()

    def on_dialogclosebutton_clicked(self, dialogclosebutton, data=None):
        self.dialog1.hide()
        self.mainwindow.show()       

    def on_dialogokbutton_clicked(self, dialogokbutton, data=None):
        self.vbedrag = self.bedrag.get_text()
        self.oid = self.nummer.get_text()
        self.dialog1.hide()
        self.dialog2.run()

    def on_yes_clicked(self, yes, data=None):
        fl.transfer(self.vid, self.nummer.get_text(), self.bedrag.get_text())
        self.dialog2.hide()
        self.mainwindow.show()  
        self.saldo.set_text(str(fl.checksaldo(self.nummerid.get_text())))
        # Log transactie bij verzender en ontvanger.
        fl.log(self.vid, "Een bedrag van "+self.vbedrag+" patan is succesvol overgemaakt naar rekeningnummer "+self.oid +".")
        fl.log(self.oid, self.vnaam + " heeft een bedrag van " + self.vbedrag + " patan naar u overgemaakt.")

    def on_no_clicked(self, no, data=None):
        self.dialog2.hide()
        self.mainwindow.show()

    # Initialisatie functie
    def __init__(self):

        # Open xml bestand en voeg objecten toe.
        builder = gtk.Builder()
        builder.add_from_file("fourleafbank.glade")

        # Windows
        self.loginwindow = builder.get_object("loginwindow")
        self.mainwindow = builder.get_object("mainwindow")
        self.dialog1 = builder.get_object("dialog1")
        self.dialog2 = builder.get_object("dialog2")
        
        # Buttons
        self.loginbutton = builder.get_object("loginbutton")
        self.closebutton = builder.get_object("closebutton")
        self.refreshbutton = builder.get_object("refreshbutton")
        self.dialogclosebutton = builder.get_object("dialogclosebutton")
        self.dialogokbutton = builder.get_object("dialogokbutton")
        self.yes = builder.get_object("yes")
        self.no = builder.get_object("no")


        # Text fields
        self.nummerid = builder.get_object("nummerid")
        self.naam = builder.get_object("naam")
        self.password = builder.get_object("password")
        self.saldo = builder.get_object("saldo")
        self.logbox = builder.get_object("logbox")
        self.nummer = builder.get_object("nummer")
        self.bedrag = builder.get_object("bedrag")

        # Labels
        self.statuslabel = builder.get_object("statuslabel")
        self.hilabel = builder.get_object("hilabel")

        # Member variables and others
        self.adjustment = builder.get_object("adjustment1")
        self.vid = ""
        self.oid = ""
        self.vbedrag = ""
        self.vnaam = ""
        self.txtbuffer = gtk.TextBuffer()

        builder.connect_signals(self)


# Draai programma    
if __name__ == "__main__":
    fl = bank.bank()
    editor = Window()
    editor.loginwindow.show()
    gtk.main()
